[Continual] Feature Storeを実現しつつ機械学習モデルを作成する
大阪オフィスの玉井です。
今回は、ContinualでFeature Storeの仕組みを実現しつつ、機械学習を行います。
Continualって何?って人は、先に下記をどうぞ。
Feature Storeとは
ざっくりいうと、「機械学習を行うにあたって必要な特徴量をまとめて管理する仕組み・基盤」という感じでしょうか。
詳しく知りたい方は、ググると色々な記事が出てくるので、そちらもご覧ください(Feature Storeを実現できるサービスもあります)。
- Feature Storeを概観する - temple
- Amazon SageMaker Feature Store (機械学習機能のフルマネージドリポジトリ) | AWS
- Vertex Feature Store で特徴量管理の MLOps はこう変わる | Google Cloud Blog
- 特徴量ストア(Feature Store)とは- MLOps プラットフォームとデータと協調設計|Databricks Feature Store - Databricks ブログ
- 機械学習システムのフィーチャ管理基盤、Feastの紹介 | GMOインターネットグループ 次世代システム研究室
そして、Continualにも、Feature Storeを実現できる機能があります。
Feature setとEntity
ContinualでFeature Storeを実現する場合、Feature set
とEntity
という2つの機能を理解して使う必要があります。
Feature set
その名の通り、特徴量のセットを(Continual上で)定義したものになります。一度定義しておくと、他の機械学習モデルの作成にも再利用することができます。
Entity
Feature setを一つのカテゴリ等にまとめることができます。
例えば、DWHにあるテーブル、もしくはcustomer_transactions
、customer_accounts
などのFeature setを個別に扱わなくても、customers
というEntityを用意すれば、顧客に関するデータを一つにまとめて扱うことができます。
機械学習モデルを作成する際には、customer_id
のような主キーを、Entityである customers
にリンクさせればOKです(customers
に属するFeature setが学習に使用される)。結合方法等をこちらが気にする必要はありません。
やってみた
実際にFeature setを作成して、それを利用して機械学習モデルを作成してみます。
やること
下記でやったことを、Feature set
を使ったバージョンでやってみます。データや環境の準備も、下記を実施した状態であることを前提に進めます。
Feature setを作成する
早速ですが、まずはFeature set
を作成する必要があります。作成の仕方はModelと同じ…つまりyamlファイルで定義することができます。
下記を用意して、Continualに登録します。
type: FeatureSet name: prospect_info entity: prospects description: インバウンドの見込み客に関する情報 index: prospectid exclude_columns: - converted query: > select * from `tamai-rei.featurestore.Lead_Scoring`
ここで作成するのは機械学習モデルではなくFeature setなので、当然type
は、ModelではなくFeatureSetになります。
その他、いくつか重要なパラメータを説明します。
entity
- このFeature setが属するEntityを指定します。
index
- データを一意に判別できるカラムを指定します(主キー)。
exclude_columns
- このFeature setで使用しないカラム
- 今回でいえば、
converted
は予測したい値であり、学習には使わない(特徴量ではない)ので、ここで指定して除外します。
query
- Feature setとなるデータ(クエリ)を指定します。
yamlファイルを作成したら、Continualにアップロードします。
$ continual push prospect_info.yml Pushing path(s) ['Downloads/prospect_info.yml'] into Continual Updating (lead_scoring_example_3@prod): Pushing path(s) ['prospect_info.yml'] from CLI. Operations for xxxxxxxxxxxxxxxxxxx in project lead_scoring_example_3, environment prod: Operation State Feature Set: prospect_info CREATE PENDING PROFILE PENDING Link: https://cloud.continual.ai/projects/lead_scoring_example_3/changes/xxxxxxxxxxxxxxx
ContinualにWebブラウザでログインして、Feature setを確認します。
アップロードしたFeature setの詳細はこんな感じ。他にも、メニューからデータのプレビューが確認できたり、このFeature setが使われた履歴が確認できたりします。
登録されたFeature setを使用した機械学習モデルを作成する
Feature setを利用する場合でも、yamlファイルでModelを定義することができます。
type: Model name: lead_converted description: どのリードが顧客につながるかを予測するモデル index: prospectid target: converted columns: - type: TEXT name: prospectid entity: prospects - type: BOOLEAN name: converted query: > select prospectid, converted from `tamai-rei.featurestore.Lead_Scoring`
ポイントは、カラムの詳細を指定する部分で、entity: prospects
としているところです。ここでprospects
というEntityと(prospectid
というカラムを通じて)紐付けているため、Continualはそれを受け、Entityがprospects
でつながっているデータを学習に使用してくれます。それに伴い、query
では、index
にあたるカラムと予測したいカラムの2つだけ指定するように変えています。
ファイルが作成できたら、これまたそれをアップロードします。
$ continual push lead_converted.yml
モデルの確認
モデルの作成が完了すれば、(当たり前ですが)詳細を確認することができます。
これは偶然なのですが、前回作成したときと同じモデル名にすると、自動的に成績の良い方に置き換えてくれるようです(前回との差異が表示されている)。使用アルゴリズムも別のものになっています。
また、どのFeature setがどういうEntityで結ばれて学習に使われたのかが、図でわかるようになっていました。
他はスタンドアローンモデル(Feature setを使わないModel)と同様です。どの特徴量が一番関係しているかどうかがわかったり、予測結果がDWH上で確認できたりするところは全く同じでした。
Feature setとEntityを用意するメリット
他のユースケースで再利用できる
今回の作業だけでは実感しづらいですが、例えば、数カ月後に、別の機械学習モデルを作成するとなったときに「見込み客データを使いたい」となったとします。普通であれば、再度、見込み客のデータを定義し直さないといけません。しかし、今回は、見込み客のデータを既にFeature setとして登録済なので、新しいModelの定義で、そのEntityに接続するだけで、見込み客データを再利用することができます。
特徴量への新しいデータ追加が簡単にできる
さらに時間が経ってくれば、見込み客データに、新しいデータを追加する場合も有り得ると思います。
新しいFeature setがEntityに接続されると、ContinualはそのEntityを使用しているすべてのモデルを把握し、それらを更新して新しいモデル・バージョンを自動的に作成してくれます。
ユースケースが増えてくると、Entityの影響を受けるモデルが数十個になることも考えられます。これら全てのモデルを手動で更新するとなると、更新作業がすごく複雑になります。
Continualは、このような場合でも、手間をかけずに簡単に更新できるようになっています。
おわりに
あらゆる機械学習サービスが、Feature Storeの機能を備えてきています。Continualは、この特徴量にあたるデータもDWHのデータを使うので、(別途機械学習用のデータ置き場を用意しなくていいという意味で)非常にやりやすいです。